
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>实现MySQL的横向扩展 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>实现MySQL的横向扩展 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">什么是横向扩展（Horizontal Scaling），它与纵向扩展（Vertical Scaling）的根本区别是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">横向扩展，也称为水平扩展，是指通过增加更多的独立服务器或节点来提升系统的处理能力和可用性。它与纵向扩展的根本区别在于，纵向扩展是通过升级单个服务器的硬件资源（如CPU、内存和存储）来提高性能。</div>
          </div>
          <div class="card-source">来源: 横向扩展的定义</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">文档中提到了横向扩展策略的哪四个主要特点？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1. 资源分散：负载被分散到多个服务器上，每个服务器独立处理请求。<br>2. 高可用性：单个节点故障时，其他节点仍可提供服务。<br>3. 可扩展性：可根据需要动态添加新节点，无需停机。<br>4. 成本效益：使用多个低成本普通服务器通常比升级单个高端服务器的成本更低。</div>
          </div>
          <div class="card-source">来源: 横向扩展的特点</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">MySQL主从复制的核心工作机制涉及哪三个关键部分？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1. 二进制日志（Binlog）：主数据库记录所有更改操作的二进制日志。<br>2. 复制线程：从数据库启动一个复制线程，从主数据库拉取binlog。<br>3. SQL线程：从数据库接收到binlog后，解析日志并将其应用到自己的数据上。</div>
          </div>
          <div class="card-source">来源: 主从复制 - 3. 工作机制</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">MySQL主从复制有哪三种类型？它们在数据一致性和性能方面有何权衡？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1. 异步复制：性能较好，但可能导致数据延迟和不一致风险。<br>2. 半同步复制：主库等待至少一个从库确认，提高了数据一致性，但可能影响写操作性能。<br>3. 同步复制：主库等待所有从库确认，保证强一致性，但会显著降低写入性能。</div>
          </div>
          <div class="card-source">来源: 主从复制 - 2. 复制类型</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">什么是读写分离？它的基本工作原理是怎样的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">读写分离是一种将数据库的读请求和写请求分别路由到不同数据库实例的架构。其基本工作原理是：写操作（如INSERT, UPDATE, DELETE）发送到主数据库，而读操作（如SELECT）则被分发到一个或多个从数据库。</div>
          </div>
          <div class="card-source">来源: 读写分离 - 1. 概念</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">在实施读写分离时，需要注意哪些由数据延迟引发的关键问题？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">由于从数据库的数据是通过复制而来，可能存在数据延迟。需要注意的关键问题包括：1. 写操作后紧接着的读操作可能无法获取最新数据。2. 在一个事务中先执行写操作后立即进行读操作，可能会读取到过期的数据。</div>
          </div>
          <div class="card-source">来源: 读写分离 - 5. 注意事项</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">文档介绍了哪两种主要的数据分片类型？请简述它们的原理和优劣势。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1. 基于范围的分片（Range-based Sharding）：根据某个字段的范围划分数据。优势是易于实现且支持范围查询，劣势是可能导致热点数据集中。<br>2. 基于哈希的分片（Hash-based Sharding）：通过对字段进行哈希计算来分布数据。优势是能有效均衡数据分布，劣势是不支持范围查询且数据迁移复杂。</div>
          </div>
          <div class="card-source">来源: 数据分片 - 2. 分片的类型</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">实施数据分片会带来哪些新的挑战？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">实施数据分片带来的挑战包括：复杂性增加、跨片查询性能可能下降、数据迁移成本高、数据一致性更难保证（需考虑分布式事务）以及需要有效的监控与管理机制。</div>
          </div>
          <div class="card-source">来源: 数据分片 - 5. 挑战与注意事项</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">数据库中间件在数据库架构中扮演什么角色？它提供了哪些核心功能？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">数据库中间件位于应用程序与数据库之间，充当一个抽象层和桥梁。其核心功能包括：连接池管理、负载均衡、读写分离、故障恢复、数据分片、事务管理和数据路由。</div>
          </div>
          <div class="card-source">来源: 数据库中间件 - 1. 概念 / 2. 核心功能</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
